package com.agua.enturno.vista;

import com.agua.enturno.excepciones.ExcepcionDeReglaDelNegocio;
import com.agua.enturno.servicios.UsuarioService;
import com.agua.enturno.vista.dto.UsuarioDeSessionDTO;
import org.apache.wicket.authroles.authentication.AuthenticatedWebSession;
import org.apache.wicket.authroles.authorization.strategies.role.Roles;
import org.apache.wicket.injection.Injector;
import org.apache.wicket.request.Request;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.joda.time.DateTime;

public class EnTurnoSession extends AuthenticatedWebSession {

	private static final long serialVersionUID = 1L;
	
	@SpringBean
	private UsuarioService usuarioService;
	private UsuarioDeSessionDTO usuario = null;

	
	public EnTurnoSession(Request request) {
		super(request);
		
		// Para que tome el @SpringBean aunque no estemos en un componente
		Injector.get().inject(this);
	}


	@Override
	public Roles getRoles() {
		
		Roles roles = new Roles();
		
		if( isSignedIn() ) 
			roles.addAll(getUsuario().getRoles());
		
		return roles;
	}
	
	@Override
	public boolean authenticate(String username, String password) {
		
		try {
			this.usuario = usuarioService.authenticate(username, password);
			return true;
		} catch (ExcepcionDeReglaDelNegocio e) {
			return false;
		}
	}
	
	public boolean hayUsuarioLogueado() {
		return (usuario != null);
	}
	
	public UsuarioDeSessionDTO getUsuario() {
		return usuario;
	}
	
	public void logoutUser() {
		usuarioService.updateLastLogin(this.usuario.getId(), DateTime.now());
		this.invalidate();
	}

}
